package util;

import Dao.BasDao;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

public class DatabaseUtil {
    private static String driver;       //数据库驱动字符串
    private static String url;          //连接URL字符串
    private static String user;         //数据库用户名
    private static String password;     //用户密码
    static Connection conn = null;
    /**
     * 获取数据库连接对象
     * */
    static {//静态代码块，在类加载的时候执行
        init();
    }
    /**
     * 初始化连接参数，从配置文件里获得
     * */
    public static void init(){
        Properties params = new Properties();
        String config = "database.properties";
        //加载配置文件到输入流中
        InputStream is = BasDao.class.getClassLoader().getResourceAsStream(config);
        try {
            //从输入流中读取属性列表
            params.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //根据指定的键获取对应的值
        driver = params.getProperty("driver");
        url = params.getProperty("url");
        user = params.getProperty("user");
        password = params.getProperty("password");
    }
    public static Connection getConnection(){
        try {
            if(conn == null || conn.isClosed()){
                try {
                    Class.forName(driver);
                    conn = DriverManager.getConnection(url,user,password);
                } catch (Exception e) {
                    e.printStackTrace();        //异常处理
                }
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return conn;
    }

    public static String now(){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        String datas=df.format(new Date());
        return datas;
    }
    /**
     * 关闭数据库连接
     * @param conn 数据库连接
     * @param stmt Statement对象
     * @param rs 结果集
     * */
    public static void closeAll(Connection conn, Statement stmt, ResultSet rs){
        //若结果集对象不为空，则关闭
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(stmt != null){
            //若Statement对象不为空,则关闭
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if(conn != null){
            //若Connection对象不为空,则关闭
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }
}
